library(tidyverse)
library(openintro)
library(readxl)
library(readr)
library(plotly)
library("rnaturalearth")
library("rnaturalearthdata")
WHOLifeExpectancy <- read_excel("WHOLifeExpectancy.xlsx")
WHO_metadata <- read_csv("WHO_metadata.csv", col_names = FALSE) 
my_map_theme <- function(){
  theme(panel.background=element_blank(),
        axis.text=element_blank(),
        axis.ticks=element_blank(),
        axis.title=element_blank())
}

Question 1

WHOLifeExpectancy <- WHOLifeExpectancy %>%
  rename(
    "country" = "...1",
    "HALEbirth_Both sexes_2016" = "Healthy life expectancy (HALE) at birth (years)",
    "HALEbirth_Both sexes_2015" = "...3",
    "HALEbirth_Both sexes_2010" = "...4",
    "HALEbirth_Both sexes_2005" = "...5",
    "HALEbirth_Both sexes_2000" = "...6",
    "HALEbirth_Male_2016" = "...7",
    "HALEbirth_Male_2015" = "...8",
    "HALEbirth_Male_2010" = "...9",
    "HALEbirth_Male_2005" = "...10",
    "HALEbirth_Male_2000" = "...11",
    "HALEbirth_Female_2016" = "...12",
    "HALEbirth_Female_2015" = "...13",
    "HALEbirth_Female_2010" = "...14",
    "HALEbirth_Female_2005" = "...15",
    "HALEbirth_Female_2000" = "...16",
    "HALE60_Both sexes_2016" = "Healthy life expectancy (HALE) at age 60 (years)",
    "HALE60_Both sexes_2015" = "...18",
    "HALE60_Both sexes_2010" = "...19",
    "HALE60_Both sexes_2005" = "...20",
    "HALE60_Both sexes_2000" = "...21",
    "HALE60_Male_2016" = "...22",
    "HALE60_Male_2015" = "...23",
    "HALE60_Male_2010" = "...24",
    "HALE60_Male_2005" = "...25",
    "HALE60_Male_2000" = "...26",
    "HALE60_Female_2016" = "...27",
    "HALE60_Female_2015" = "...28",
    "HALE60_Female_2010" = "...29",
    "HALE60_Female_2005" = "...30",
    "HALE60_Female_2000" = "...31",
  ) %>%
  filter(!is.na(country))
WHOLifeExpectancy
## # A tibble: 183 x 31
##    country `HALEbirth_Both… `HALEbirth_Both… `HALEbirth_Both… `HALEbirth_Both…
##    <chr>   <chr>            <chr>            <chr>            <chr>           
##  1 Afghan… 53.0             53.2             51.6             49.6            
##  2 Albania 68.1             67.8             66.4             65.4            
##  3 Algeria 65.5             65.3             64.5             62.8            
##  4 Angola  55.8             55.3             51.8             46.7            
##  5 Antigu… 67.0             66.9             66.5             65.4            
##  6 Argent… 68.4             68.2             67.3             66.7            
##  7 Armenia 66.3             66.0             65.2             64.7            
##  8 Austra… 73.0             72.7             72.2             71.4            
##  9 Austria 72.4             72.1             71.4             70.6            
## 10 Azerba… 64.9             64.6             63.4             61.5            
## # … with 173 more rows, and 26 more variables: `HALEbirth_Both
## #   sexes_2000` <chr>, HALEbirth_Male_2016 <chr>, HALEbirth_Male_2015 <chr>,
## #   HALEbirth_Male_2010 <chr>, HALEbirth_Male_2005 <chr>,
## #   HALEbirth_Male_2000 <chr>, HALEbirth_Female_2016 <chr>,
## #   HALEbirth_Female_2015 <chr>, HALEbirth_Female_2010 <chr>,
## #   HALEbirth_Female_2005 <chr>, HALEbirth_Female_2000 <chr>, `HALE60_Both
## #   sexes_2016` <chr>, `HALE60_Both sexes_2015` <chr>, `HALE60_Both
## #   sexes_2010` <chr>, `HALE60_Both sexes_2005` <chr>, `HALE60_Both
## #   sexes_2000` <chr>, HALE60_Male_2016 <chr>, HALE60_Male_2015 <chr>,
## #   HALE60_Male_2010 <chr>, HALE60_Male_2005 <chr>, HALE60_Male_2000 <chr>,
## #   HALE60_Female_2016 <chr>, HALE60_Female_2015 <chr>,
## #   HALE60_Female_2010 <chr>, HALE60_Female_2005 <chr>,
## #   HALE60_Female_2000 <chr>

Question 2

WHOLifeExpectancy <- WHOLifeExpectancy %>%
  pivot_longer("HALEbirth_Both sexes_2016":"HALE60_Female_2000", names_to="Column", values_to="value") %>%
  separate(Column, into=c("HALE_type", "sex", "year"), sep="_") %>%
  pivot_wider(names_from="HALE_type", values_from="value") %>%
  arrange(desc(year))
WHOLifeExpectancy
## # A tibble: 2,745 x 5
##    country     sex        year  HALEbirth HALE60
##    <chr>       <chr>      <chr> <chr>     <chr> 
##  1 Afghanistan Both sexes 2016  53.0      11.3  
##  2 Afghanistan Male       2016  52.1      10.9  
##  3 Afghanistan Female     2016  54.1      11.7  
##  4 Albania     Both sexes 2016  68.1      16.3  
##  5 Albania     Male       2016  66.7      15.3  
##  6 Albania     Female     2016  69.6      17.4  
##  7 Algeria     Both sexes 2016  65.5      15.8  
##  8 Algeria     Male       2016  65.4      15.7  
##  9 Algeria     Female     2016  65.6      15.8  
## 10 Angola      Both sexes 2016  55.8      13.6  
## # … with 2,735 more rows

Question 3

WHO_metadata <- WHO_metadata%>%
  rename(
    "iso3" = "X2",
    "country" = "X3",
  )

world <- ne_countries(scale = "medium", returnclass = "sf")

WHOLifeExpectancy2016 <- WHOLifeExpectancy %>%
  filter(year==2016, sex=="Both sexes")
WHOLifeExpectancy2016
## # A tibble: 183 x 5
##    country             sex        year  HALEbirth HALE60
##    <chr>               <chr>      <chr> <chr>     <chr> 
##  1 Afghanistan         Both sexes 2016  53.0      11.3  
##  2 Albania             Both sexes 2016  68.1      16.3  
##  3 Algeria             Both sexes 2016  65.5      15.8  
##  4 Angola              Both sexes 2016  55.8      13.6  
##  5 Antigua and Barbuda Both sexes 2016  67.0      15.6  
##  6 Argentina           Both sexes 2016  68.4      17.3  
##  7 Armenia             Both sexes 2016  66.3      15.1  
##  8 Australia           Both sexes 2016  73.0      20.4  
##  9 Austria             Both sexes 2016  72.4      19.3  
## 10 Azerbaijan          Both sexes 2016  64.9      14.6  
## # … with 173 more rows
WHOLifeExpectancy2016 <- left_join(WHOLifeExpectancy2016, WHO_metadata, by=c("country" = "country"))

sf_object <- left_join(world, WHOLifeExpectancy2016, by=c("adm0_a3" = "iso3"))
sf_object
## Simple feature collection with 241 features and 69 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -180 ymin: -89.99893 xmax: 180 ymax: 83.59961
## CRS:            +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## First 10 features:
##    scalerank      featurecla labelrank           sovereignt sov_a3 adm0_dif
## 1          3 Admin-0 country         5          Netherlands    NL1        1
## 2          1 Admin-0 country         3          Afghanistan    AFG        0
## 3          1 Admin-0 country         3               Angola    AGO        0
## 4          1 Admin-0 country         6       United Kingdom    GB1        1
## 5          1 Admin-0 country         6              Albania    ALB        0
## 6          3 Admin-0 country         6              Finland    FI1        1
## 7          3 Admin-0 country         6              Andorra    AND        0
## 8          1 Admin-0 country         4 United Arab Emirates    ARE        0
## 9          1 Admin-0 country         2            Argentina    ARG        0
## 10         1 Admin-0 country         6              Armenia    ARM        0
##    level              type                admin adm0_a3 geou_dif
## 1      2           Country                Aruba     ABW        0
## 2      2 Sovereign country          Afghanistan     AFG        0
## 3      2 Sovereign country               Angola     AGO        0
## 4      2        Dependency             Anguilla     AIA        0
## 5      2 Sovereign country              Albania     ALB        0
## 6      2           Country                Aland     ALD        0
## 7      2 Sovereign country              Andorra     AND        0
## 8      2 Sovereign country United Arab Emirates     ARE        0
## 9      2 Sovereign country            Argentina     ARG        0
## 10     2 Sovereign country              Armenia     ARM        0
##                 geounit gu_a3 su_dif              subunit su_a3 brk_diff
## 1                 Aruba   ABW      0                Aruba   ABW        0
## 2           Afghanistan   AFG      0          Afghanistan   AFG        0
## 3                Angola   AGO      0               Angola   AGO        0
## 4              Anguilla   AIA      0             Anguilla   AIA        0
## 5               Albania   ALB      0              Albania   ALB        0
## 6                 Aland   ALD      0                Aland   ALD        0
## 7               Andorra   AND      0              Andorra   AND        0
## 8  United Arab Emirates   ARE      0 United Arab Emirates   ARE        0
## 9             Argentina   ARG      0            Argentina   ARG        0
## 10              Armenia   ARM      0              Armenia   ARM        0
##                    name            name_long brk_a3             brk_name
## 1                 Aruba                Aruba    ABW                Aruba
## 2           Afghanistan          Afghanistan    AFG          Afghanistan
## 3                Angola               Angola    AGO               Angola
## 4              Anguilla             Anguilla    AIA             Anguilla
## 5               Albania              Albania    ALB              Albania
## 6                 Aland        Aland Islands    ALD                Aland
## 7               Andorra              Andorra    AND              Andorra
## 8  United Arab Emirates United Arab Emirates    ARE United Arab Emirates
## 9             Argentina            Argentina    ARG            Argentina
## 10              Armenia              Armenia    ARM              Armenia
##    brk_group abbrev postal                    formal_en formal_fr note_adm0
## 1       <NA>  Aruba     AW                        Aruba      <NA>     Neth.
## 2       <NA>   Afg.     AF Islamic State of Afghanistan      <NA>      <NA>
## 3       <NA>   Ang.     AO  People's Republic of Angola      <NA>      <NA>
## 4       <NA>   Ang.     AI                         <NA>      <NA>      U.K.
## 5       <NA>   Alb.     AL          Republic of Albania      <NA>      <NA>
## 6       <NA>  Aland     AI                Ã…land Islands      <NA>      Fin.
## 7       <NA>   And.    AND      Principality of Andorra      <NA>      <NA>
## 8       <NA> U.A.E.     AE         United Arab Emirates      <NA>      <NA>
## 9       <NA>   Arg.     AR           Argentine Republic      <NA>      <NA>
## 10      <NA>   Arm.    ARM          Republic of Armenia      <NA>      <NA>
##    note_brk            name_sort name_alt mapcolor7 mapcolor8 mapcolor9
## 1      <NA>                Aruba     <NA>         4         2         2
## 2      <NA>          Afghanistan     <NA>         5         6         8
## 3      <NA>               Angola     <NA>         3         2         6
## 4      <NA>             Anguilla     <NA>         6         6         6
## 5      <NA>              Albania     <NA>         1         4         1
## 6      <NA>                Aland     <NA>         4         1         4
## 7      <NA>              Andorra     <NA>         1         4         1
## 8      <NA> United Arab Emirates     <NA>         2         1         3
## 9      <NA>            Argentina     <NA>         3         1         3
## 10     <NA>              Armenia     <NA>         3         1         2
##    mapcolor13  pop_est gdp_md_est pop_year lastcensus gdp_year
## 1           9   103065     2258.0       NA       2010       NA
## 2           7 28400000    22270.0       NA       1979       NA
## 3           1 12799293   110300.0       NA       1970       NA
## 4           3    14436      108.9       NA         NA       NA
## 5           6  3639453    21810.0       NA       2001       NA
## 6           6    27153     1563.0       NA         NA       NA
## 7           8    83888     3660.0       NA       1989       NA
## 8           3  4798491   184300.0       NA       2010       NA
## 9          13 40913584   573900.0       NA       2010       NA
## 10         10  2967004    18770.0       NA       2001       NA
##                       economy              income_grp wikipedia fips_10 iso_a2
## 1        6. Developing region 2. High income: nonOECD        NA    <NA>     AW
## 2   7. Least developed region           5. Low income        NA    <NA>     AF
## 3   7. Least developed region  3. Upper middle income        NA    <NA>     AO
## 4        6. Developing region  3. Upper middle income        NA    <NA>     AI
## 5        6. Developing region  4. Lower middle income        NA    <NA>     AL
## 6  2. Developed region: nonG7    1. High income: OECD        NA    <NA>     AX
## 7  2. Developed region: nonG7 2. High income: nonOECD        NA    <NA>     AD
## 8        6. Developing region 2. High income: nonOECD        NA    <NA>     AE
## 9     5. Emerging region: G20  3. Upper middle income        NA    <NA>     AR
## 10       6. Developing region  4. Lower middle income        NA    <NA>     AM
##    iso_a3 iso_n3 un_a3 wb_a2 wb_a3 woe_id adm0_a3_is adm0_a3_us adm0_a3_un
## 1     ABW    533   533    AW   ABW     NA        ABW        ABW         NA
## 2     AFG    004   004    AF   AFG     NA        AFG        AFG         NA
## 3     AGO    024   024    AO   AGO     NA        AGO        AGO         NA
## 4     AIA    660   660  <NA>  <NA>     NA        AIA        AIA         NA
## 5     ALB    008   008    AL   ALB     NA        ALB        ALB         NA
## 6     ALA    248   248  <NA>  <NA>     NA        ALA        ALD         NA
## 7     AND    020   020    AD   ADO     NA        AND        AND         NA
## 8     ARE    784   784    AE   ARE     NA        ARE        ARE         NA
## 9     ARG    032   032    AR   ARG     NA        ARG        ARG         NA
## 10    ARM    051   051    AM   ARM     NA        ARM        ARM         NA
##    adm0_a3_wb     continent region_un       subregion
## 1          NA North America  Americas       Caribbean
## 2          NA          Asia      Asia   Southern Asia
## 3          NA        Africa    Africa   Middle Africa
## 4          NA North America  Americas       Caribbean
## 5          NA        Europe    Europe Southern Europe
## 6          NA        Europe    Europe Northern Europe
## 7          NA        Europe    Europe Southern Europe
## 8          NA          Asia      Asia    Western Asia
## 9          NA South America  Americas   South America
## 10         NA          Asia      Asia    Western Asia
##                     region_wb name_len long_len abbrev_len tiny homepart
## 1   Latin America & Caribbean        5        5          5    4       NA
## 2                  South Asia       11       11          4   NA        1
## 3          Sub-Saharan Africa        6        6          4   NA        1
## 4   Latin America & Caribbean        8        8          4   NA       NA
## 5       Europe & Central Asia        7        7          4   NA        1
## 6       Europe & Central Asia        5       13          5    5       NA
## 7       Europe & Central Asia        7        7          4    5        1
## 8  Middle East & North Africa       20       20          6   NA        1
## 9   Latin America & Caribbean        9        9          4   NA        1
## 10      Europe & Central Asia        7        7          4   NA        1
##                 country        sex year HALEbirth HALE60      X1
## 1                  <NA>       <NA> <NA>      <NA>   <NA>    <NA>
## 2           Afghanistan Both sexes 2016      53.0   11.3 COUNTRY
## 3                Angola Both sexes 2016      55.8   13.6 COUNTRY
## 4                  <NA>       <NA> <NA>      <NA>   <NA>    <NA>
## 5               Albania Both sexes 2016      68.1   16.3 COUNTRY
## 6                  <NA>       <NA> <NA>      <NA>   <NA>    <NA>
## 7                  <NA>       <NA> <NA>      <NA>   <NA>    <NA>
## 8  United Arab Emirates Both sexes 2016      66.7   14.9 COUNTRY
## 9             Argentina Both sexes 2016      68.4   17.3 COUNTRY
## 10              Armenia Both sexes 2016      66.3   15.1 COUNTRY
##                          geometry
## 1  MULTIPOLYGON (((-69.89912 1...
## 2  MULTIPOLYGON (((74.89131 37...
## 3  MULTIPOLYGON (((14.19082 -5...
## 4  MULTIPOLYGON (((-63.00122 1...
## 5  MULTIPOLYGON (((20.06396 42...
## 6  MULTIPOLYGON (((20.61133 60...
## 7  MULTIPOLYGON (((1.706055 42...
## 8  MULTIPOLYGON (((53.92783 24...
## 9  MULTIPOLYGON (((-64.54917 -...
## 10 MULTIPOLYGON (((45.55234 40...

Question 4

ggplot(sf_object) +
  geom_sf(aes(fill=as.numeric(HALEbirth))) +
  scale_fill_continuous(low="red", high="blue", breaks=c(45, 55, 65, 75)) + 
  labs(fill = "Healthy Life Expectancy at Birth (years)") +
  my_map_theme()

Question 5

sf_object <- sf_object %>%
  mutate(text = paste("Healthy Life Expectancy at Birth: ", HALEbirth, " years"))
p <- ggplot(sf_object) +
  geom_sf(aes(fill=as.numeric(HALEbirth), text=text)) +
  scale_fill_continuous(low="red", high="blue", breaks=c(45, 55, 65, 75)) + 
  labs(fill = "Healthy Life Expectancy at Birth (years)") +
  my_map_theme()
## Warning: Ignoring unknown aesthetics: text
ggplotly(p, tooltip="text")
LS0tCnRpdGxlOiAiUXVpeiAzIgphdXRob3I6ICJDaHJpcyBNb3JvbmV5IgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0Ci0tLQoKYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkob3BlbmludHJvKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShyZWFkcikKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoInJuYXR1cmFsZWFydGgiKQpsaWJyYXJ5KCJybmF0dXJhbGVhcnRoZGF0YSIpCldIT0xpZmVFeHBlY3RhbmN5IDwtIHJlYWRfZXhjZWwoIldIT0xpZmVFeHBlY3RhbmN5Lnhsc3giKQpXSE9fbWV0YWRhdGEgPC0gcmVhZF9jc3YoIldIT19tZXRhZGF0YS5jc3YiLCBjb2xfbmFtZXMgPSBGQUxTRSkgCm15X21hcF90aGVtZSA8LSBmdW5jdGlvbigpewogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcz1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X2JsYW5rKCkpCn0KYGBgCgojIyMgUXVlc3Rpb24gMQoKYGBge3IgY29kZS1jaHVuay1sYWJlbH0KV0hPTGlmZUV4cGVjdGFuY3kgPC0gV0hPTGlmZUV4cGVjdGFuY3kgJT4lCiAgcmVuYW1lKAogICAgImNvdW50cnkiID0gIi4uLjEiLAogICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMTYiID0gIkhlYWx0aHkgbGlmZSBleHBlY3RhbmN5IChIQUxFKSBhdCBiaXJ0aCAoeWVhcnMpIiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDE1IiA9ICIuLi4zIiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDEwIiA9ICIuLi40IiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDA1IiA9ICIuLi41IiwKICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDAwIiA9ICIuLi42IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDE2IiA9ICIuLi43IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDE1IiA9ICIuLi44IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDEwIiA9ICIuLi45IiwKICAgICJIQUxFYmlydGhfTWFsZV8yMDA1IiA9ICIuLi4xMCIsCiAgICAiSEFMRWJpcnRoX01hbGVfMjAwMCIgPSAiLi4uMTEiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNiIgPSAiLi4uMTIiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNSIgPSAiLi4uMTMiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxMCIgPSAiLi4uMTQiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAwNSIgPSAiLi4uMTUiLAogICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAwMCIgPSAiLi4uMTYiLAogICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTYiID0gIkhlYWx0aHkgbGlmZSBleHBlY3RhbmN5IChIQUxFKSBhdCBhZ2UgNjAgKHllYXJzKSIsCiAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAxNSIgPSAiLi4uMTgiLAogICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTAiID0gIi4uLjE5IiwKICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDA1IiA9ICIuLi4yMCIsCiAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAwMCIgPSAiLi4uMjEiLAogICAgIkhBTEU2MF9NYWxlXzIwMTYiID0gIi4uLjIyIiwKICAgICJIQUxFNjBfTWFsZV8yMDE1IiA9ICIuLi4yMyIsCiAgICAiSEFMRTYwX01hbGVfMjAxMCIgPSAiLi4uMjQiLAogICAgIkhBTEU2MF9NYWxlXzIwMDUiID0gIi4uLjI1IiwKICAgICJIQUxFNjBfTWFsZV8yMDAwIiA9ICIuLi4yNiIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDE2IiA9ICIuLi4yNyIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDE1IiA9ICIuLi4yOCIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDEwIiA9ICIuLi4yOSIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDA1IiA9ICIuLi4zMCIsCiAgICAiSEFMRTYwX0ZlbWFsZV8yMDAwIiA9ICIuLi4zMSIsCiAgKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNvdW50cnkpKQpXSE9MaWZlRXhwZWN0YW5jeQpgYGAKCiMjIyBRdWVzdGlvbiAyCgpgYGB7cn0KV0hPTGlmZUV4cGVjdGFuY3kgPC0gV0hPTGlmZUV4cGVjdGFuY3kgJT4lCiAgcGl2b3RfbG9uZ2VyKCJIQUxFYmlydGhfQm90aCBzZXhlc18yMDE2IjoiSEFMRTYwX0ZlbWFsZV8yMDAwIiwgbmFtZXNfdG89IkNvbHVtbiIsIHZhbHVlc190bz0idmFsdWUiKSAlPiUKICBzZXBhcmF0ZShDb2x1bW4sIGludG89YygiSEFMRV90eXBlIiwgInNleCIsICJ5ZWFyIiksIHNlcD0iXyIpICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb209IkhBTEVfdHlwZSIsIHZhbHVlc19mcm9tPSJ2YWx1ZSIpICU+JQogIGFycmFuZ2UoZGVzYyh5ZWFyKSkKV0hPTGlmZUV4cGVjdGFuY3kKYGBgCgojIyMgUXVlc3Rpb24gMwoKYGBge3J9CldIT19tZXRhZGF0YSA8LSBXSE9fbWV0YWRhdGElPiUKICByZW5hbWUoCiAgICAiaXNvMyIgPSAiWDIiLAogICAgImNvdW50cnkiID0gIlgzIiwKICApCgp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibWVkaXVtIiwgcmV0dXJuY2xhc3MgPSAic2YiKQoKV0hPTGlmZUV4cGVjdGFuY3kyMDE2IDwtIFdIT0xpZmVFeHBlY3RhbmN5ICU+JQogIGZpbHRlcih5ZWFyPT0yMDE2LCBzZXg9PSJCb3RoIHNleGVzIikKV0hPTGlmZUV4cGVjdGFuY3kyMDE2CgpXSE9MaWZlRXhwZWN0YW5jeTIwMTYgPC0gbGVmdF9qb2luKFdIT0xpZmVFeHBlY3RhbmN5MjAxNiwgV0hPX21ldGFkYXRhLCBieT1jKCJjb3VudHJ5IiA9ICJjb3VudHJ5IikpCgpzZl9vYmplY3QgPC0gbGVmdF9qb2luKHdvcmxkLCBXSE9MaWZlRXhwZWN0YW5jeTIwMTYsIGJ5PWMoImFkbTBfYTMiID0gImlzbzMiKSkKc2Zfb2JqZWN0CmBgYAoKIyMjIFF1ZXN0aW9uIDQKCmBgYHtyfQpnZ3Bsb3Qoc2Zfb2JqZWN0KSArCiAgZ2VvbV9zZihhZXMoZmlsbD1hcy5udW1lcmljKEhBTEViaXJ0aCkpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0icmVkIiwgaGlnaD0iYmx1ZSIsIGJyZWFrcz1jKDQ1LCA1NSwgNjUsIDc1KSkgKyAKICBsYWJzKGZpbGwgPSAiSGVhbHRoeSBMaWZlIEV4cGVjdGFuY3kgYXQgQmlydGggKHllYXJzKSIpICsKICBteV9tYXBfdGhlbWUoKQpgYGAKCiMjIyBRdWVzdGlvbiA1CgpgYGB7cn0Kc2Zfb2JqZWN0IDwtIHNmX29iamVjdCAlPiUKICBtdXRhdGUodGV4dCA9IHBhc3RlKCJIZWFsdGh5IExpZmUgRXhwZWN0YW5jeSBhdCBCaXJ0aDogIiwgSEFMRWJpcnRoLCAiIHllYXJzIikpCnAgPC0gZ2dwbG90KHNmX29iamVjdCkgKwogIGdlb21fc2YoYWVzKGZpbGw9YXMubnVtZXJpYyhIQUxFYmlydGgpLCB0ZXh0PXRleHQpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0icmVkIiwgaGlnaD0iYmx1ZSIsIGJyZWFrcz1jKDQ1LCA1NSwgNjUsIDc1KSkgKyAKICBsYWJzKGZpbGwgPSAiSGVhbHRoeSBMaWZlIEV4cGVjdGFuY3kgYXQgQmlydGggKHllYXJzKSIpICsKICBteV9tYXBfdGhlbWUoKQoKZ2dwbG90bHkocCwgdG9vbHRpcD0idGV4dCIpCmBgYAoK